package com.qianchang.microfinance.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import com.dm.library.utils.FileUtils;
import com.dm.library.utils.IOUtils;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import static com.dm.library.utils.BitmapUtils.compressImage;

/**
 * Created by 电脑 on 2018/1/11.
 *
 */

public final class HSBitmapUtils {



    public static Bitmap getImageByPath(byte[] bytes) {
        BitmapFactory.Options newOpts = new BitmapFactory.Options();
        //开始读入图片，此时把options.inJustDecodeBounds 设回true了
        newOpts.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,bytes.length,newOpts);//此时返回bm为空

        newOpts.inJustDecodeBounds = false;
        int w = newOpts.outWidth;
        int h = newOpts.outHeight;
        //现在主流手机比较多是800*480分辨率，所以高和宽我们设置为
        float hh = 800f;//这里设置高度为800f
        float ww = 480f;//这里设置宽度为480f
        //缩放比。由于是固定比例缩放，只用高或者宽其中一个数据进行计算即可
        int be = 1;//be=1表示不缩放
        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
            be = (int) (newOpts.outWidth / ww);
        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
            be = (int) (newOpts.outHeight / hh);
        }
        if (be <= 0)
            be = 1;
        newOpts.inSampleSize = be;//设置缩放比例
        //重新读入图片，注意此时已经把options.inJustDecodeBounds 设回false了
        bitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length,newOpts);
        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
    }


    /**
     * 通过bitmap创件文件
     */
    public static String createFile(byte[] bytes) {
        Bitmap bitmap = getImageByPath(bytes);
        String fileName = System.currentTimeMillis() + "_userImage.jpg";
        String path = FileUtils.getInnerSDCardPath() + "/IndonesiaFinance/loan/";
        String photoPath = FileUtils.createFile(bitmap, path, fileName);
        if (TextUtils.isEmpty(photoPath)) {
            return null;
        }
        return photoPath;
    }

    /**
     * 通过bitmap创件文件
     */
    public static String createFile(byte[] bytes,String mFileName) {
        Bitmap bitmap = getImageByPath(bytes);
        String fileName = mFileName + ".jpg";
        String path = FileUtils.getInnerSDCardPath() + "/IndonesiaFinance/loan/";
        String photoPath = FileUtils.createFile(bitmap, path, fileName);
        if (TextUtils.isEmpty(photoPath)) {
            return null;
        }
        return photoPath;
    }


    public static String bytesToImageFile(byte[] bytes, String mFileName) {

        String photoPath = null;
        try {
            String fileName = mFileName + ".jpg";
            String path = FileUtils.getInnerSDCardPath() + "/IndonesiaFinance/loan/";
            photoPath = hscreateFile(bytes,path,fileName);
            if (TextUtils.isEmpty(photoPath)) return null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return photoPath;
    }


    public static String hscreateFile(byte[] bytes, String filePath, String fileName) {
        File dirFile = new File(filePath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        File myCaptureFile = new File(filePath + fileName);
        if(!myCaptureFile.exists()){
            try {
                myCaptureFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        BufferedOutputStream bos = null;
        try {
            FileOutputStream fos = new FileOutputStream(myCaptureFile);
            fos.write(bytes, 0, bytes.length);
            fos.flush();
            fos.close();
            return myCaptureFile.getAbsolutePath();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeOutputStream(bos);
        }
        return "";
    }


}
